home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_pcdp / ada / dekker.ada < prev    next >
Text File  |  1996-01-30  |  1KB  |  57 lines

  1. with Text_IO; use Text_IO;
  2. procedure Dekker is
  3.   pragma Time_Slice(0.01);
  4.  
  5.   C1, C2: Integer := 1;
  6.   Turn:   Integer := 1;
  7.  
  8.   pragma Volatile(C1);
  9.   pragma Volatile(C2);
  10.   pragma Volatile(Turn);
  11.  
  12.   task T1;
  13.   task body T1 is
  14.   begin
  15.     loop
  16.       Put_Line("Task 1 idling");
  17.       C1 := 0;
  18.       loop 
  19.         exit when C2 /= 0;
  20.         if Turn = 2 then
  21.           C1 := 1;
  22.           Put_Line("Task 1 reset variable");
  23.           loop exit when Turn /= 2; end loop;
  24.           C1 := 0;
  25.         end if;
  26.       end loop;
  27.       Put_Line("Task 1 critical section");
  28.       Turn := 2;
  29.       C1 := 1;
  30.     end loop;
  31.   end T1;
  32.  
  33.   task T2;
  34.   task body T2 is
  35.   begin
  36.     loop
  37.       Put_Line("Task 2 idling");
  38.       C2 := 0;
  39.       loop 
  40.         exit when C1 /= 0;
  41.         if Turn = 1 then
  42.           C2 := 1;
  43.           Put_Line("Task 2 reset variable");
  44.           loop exit when Turn /= 1; end loop;
  45.           C2 := 0;
  46.         end if;
  47.       end loop;
  48.       Put_Line("Task 2 critical section");
  49.       Turn := 1;
  50.       C2 := 1;
  51.     end loop;
  52.   end T2;
  53.  
  54. begin
  55.   null;
  56. end Dekker;
  57.